package com.renne.ai.dbcmcp.service;

import com.renne.ai.dbcmcp.external.Hope2Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;


@Service
public class StockService {
    public static final Logger log = LoggerFactory.getLogger(StockService.class);
    @Resource
    Hope2Client hope2Client;
    @Tool(name = "readme", description = """
            钱一天MCP的自我介绍，当用户问钱一天mcp的作用，都可以做什么的时候，则进行回答
            """)
    public String readme() {
        return """
                我是钱一天MCP，专门回答跟钱一天策略算法有关的问题，我可以回答以下方面的问题：
                1 大连明天的天气
                2 使用钱一天算法进行选股，并显示股票的地址
                3 请列出行业的涨幅情况
                4 A股-申万二级-一般零售  这个行业的股票都有哪些？
                5 A股-申万二级-一般零售 在这个行业里面使用钱一天算法进行选股
                6 中国平安股票的止损价格是什么？
                """;
    }
    @Tool(name = "getWeatherReport", description = """
            根据城市名称获取天气信息。
            该函数通过调用天气API，根据给定的城市名称获取当前天气信息，并返回包含天气描述的字符串。
            """)
    public String getWeatherReport(@ToolParam(description = "城市的名字") String cityName) {
        return cityName + "明天的天气是 大风，记得带伞呀";
    }

    @Tool(name = "selectStocks", description = """
            通过钱一天选股法，选出符合待涨的趋势的股票;特点是 股性活跃;价格相对低位;趋势向上;可以作为买入标的进行观察和买入。
            返回一个json格式的字符串，其中包含符合条件的股票代码，股票名称，股票访问地址。
            """)
    public String selectStocks() {
        return hope2Client.getSimplestReport();
    }



    @Tool(name = "calculateStopPrice", description = """
            根据股票代码给出该股票的三个合理的止损价位，只有问题中带有"止损"字样的时候才调用此方法；
            输入为 股票的6位数字代码
            输出是该股票的三个止损位位置
            """)
    public String calculateStopPrice(@ToolParam(description = "股票的6位数字代码") String stockCode) {
        return hope2Client.getStopPrice(stockCode);
    }

    @Tool(name = "getSimplestReportByIndustry", description = """
            根据行业的名字算出来该行业所有的股票中，有哪些股票是目前符合钱一天选股算法的，返回这些股票的列表。选出的股票的特点是 股性活跃;价格相对低位;趋势向上;可以作为买入标的进行观察和买入
            输入为 行业的名字
            返回一个json格式的字符串，其中包含符合条件的股票代码，股票名称，股票访问地址。
            """)
    public String getSimplestReportByIndustry(@ToolParam(description = "行业的名字") String industry) {
        return hope2Client.getSimplestReportByIndustry(industry);
    }


    @Tool(name = "readReportIndustry", description = """
            计算所有的行业的涨幅情况，并从涨幅从高到低的顺序排序，返回前面涨幅比较大的行业和其涨幅情况
            返回一个json格式的字符串，其中包含行业的名字和该行业对应的涨幅，从高到底排序
            """)
    public String readReportIndustry() {
        return hope2Client.readReportIndustry();
    }

    @Tool(name = "getIndustryStock", description = """
            根据行业的名字找出该行业所有的股票
            输入为 行业的名字
            返回一个json格式的字符串，其中包含符合条件的股票代码，股票名称，股票访问地址。
            """)
    public String getIndustryStock(@ToolParam(description = "行业的名字") String industry) {
        return hope2Client.getIndustryStock(industry);
    }
}
